package com;

import java.util.Date;

import net.arnx.jsonic.JSON;

import com.sample.info.OutputInfo;

public class JSONTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

	    // 返却オブジェクト作成
	    OutputInfo output = new OutputInfo();
	    output.setDate(new Date());
	    output.setName("Serializable Output Object");
	    output.getHash().put("params1", "Output1");
	    output.getHash().put("params2", "Output2");
	    output.setNum(output.getNum() + 1);
	    output.getList().add("Hoge1");
	    output.getList().add("Hoge2");

	    // JSON文字列を作成(Pretty:trueで見易くする)
	    String jsonTxt = JSON.encode(output, true);
	    System.out.println("★OutputInfo encode to JSON String Pretty Display");
	    System.out.println(jsonTxt);

	    // 以下、デコード検証
	    // こうやるとCastでこける(スーパクラスでデコードしてもCastできない)
//	    OutputInfo out1 = (OutputInfo) JSON.decode(jsonTxt, Object.class);
//      OutputInfo out2 = (OutputInfo) JSON.decode(jsonTxt);

	    // 結論：スーパークラスでデコードできるデコード後のスーパークラスからは
	    // DownCastできない
	    OutputInfo out3 = JSON.decode(jsonTxt, OutputInfo.class);

	    System.out.println("\n★JSON String decode to OutputInfo");
	    System.out.println(out3.toString());
	}

}
